#导入数据库接口
from pymongo import MongoClient
#创建数库并连接
client=MongoClient()
database=client['people']
collection=database['maoyan_data']

#爬取猫眼数据
#需要的库
import requests as rq
import pandas as pd

DATA=[]#存储全部数据
#modata=[]#存放mongodb数据
# 获取网页源代码
for page in range(10):
    # 爬取URl和页数
#    page=10*i
    url='https://maoyan.com/board/4?offset='+str(page*10)
#伪装浏览器
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
        }
    #获取网页源代码
    sources = rq.get(url,headers = header)
    #type(sources)
    data = sources.text #网页源代码
    # 第二步： 从网页源代码挖掘所要数据 --- 正则表达式获取
    import re
    p =  p = r'<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>'
    pat=re.compile(p,re.S)
    wj_data = pat.findall(data)
    
    for item in wj_data:
        da={}
        pm_data= item[0]
        tp_data= item[1]
        name= item[2]
        actor=item[3].strip()[3:]#strip()去掉空格
        time= item[4].strip()[5:]
        score=item[5] + item[6]
#        dt={'排名':pm_data,'图片':tp_data,'剧名':name,'主演':actor,'上映时间':time,'评分':score}
        date=DATA.append(da)
        
        
#转化为数据框
date=pd.DataFrame(DATA)
#    保存为excel
#index = ['排名','电影','演员','上映时间','评分']

date.to_excel('猫眼电影(正则表达式)Top100.xlsx')


#保存到数据库中
collection.insert(DATA)
# 读取数据并处理
zhuyan_data=[]#存放主演数据
time_data=[]
content=[x for x in collection.find()]
for t in range(len(content)):
    star=content[t]['主演'].split(',')
    time=content[t]['上映时间']
    for k in range(len(star)):
        zhuyan_data.append(star[k])
        time_data.append(time)
#读取主演并进行文本分析
#zhuyan=pd.DataFrame(zhuyan_data)
# 转换列表
b=pd.Series(zhuyan_data)
# 对数据去重
#list_zhuyan = list(b.value_counts())
list_zhuyan=list(b.unique())
# 统计主演名字出现的个数
zhuyan_count = []
for t in range(len(list_zhuyan)):
    c = list_zhuyan.count(list_zhuyan[t])
    zhuyan_count.append((list_zhuyan[t],c))
zhuyan_count = pd.DataFrame(zhuyan_count)

# 对个数进行排序
zhuyan_count = zhuyan_count.sort_values(1,ascending=False) 
zhuyan_count = zhuyan_count.reset_index(drop=True) 




'''
提取主演和上映时间进行分析，发现影剧的排名和上映时间没有多大的关系，
排名前面的上映时间有最近2018年、2019年的时间，也有1994年的时间，而排名后面
的并不是上映时间就是在最近几年的时间上映的；从主演看，对提取的主演进行计算总数、去重并排序，
发现影剧排名在前面的，和主演有关，通过查找相关资料知道每一个演员的受欢迎度，
主演越受欢迎，影剧的排名也靠前面，当然用这个数据分析存在一定的误差，
由于受到数据较少，以及主演分为国内和国外数据量也较少，直接这样进行分析得到的结果不可靠。
'''
# 读取图片并保存
image=[]
movice=[]
content=[x for x in collection.find()]
for t in range(len(content)):
    im=content[t]['图片']
    mo=content[t]['剧名']
    image.append(im)
    movice.append(mo)
image=pd.DataFrame(image)
A=[]#保存处理好的图片网址
for k in range(len(image)):  
    if '.webp' in image[k]:
        image_data=re.findall(r'(.+?).webp.+?',image[k])[0]
        image_data=image_data+'.webp'
    else:
        image_data=re.findall(r'(.+?).jpg.+?',image[k])[0]
        image_data=image_data+'.jpg'
    A.append(image_data)
    A=pd.DataFrame(A)
for j in range(len(A)):
    jpg_url=A.iloc[j,0]
    pic=rq.get(jpg_url,headers=header)
    jpg_data='G:\爬虫'+movice[j]+'.jpg'
    fp=open(jpg_data,'wb+')
    fp.write(pic.content)
    fp.close()





